# _3 讲了 __init__() 方法:初始化魔术方法
# 触发时机：初始化对象时触发（不是实例化触发，但和实例化在一个操作中）

# __new__() 方法:实例化的魔术方法
# 触发时机：实例化对象时触发

# __call__() 方法:可调用对象
# 触发时机：对象后面加括号时触发

class Person:
    def __init__(self, name):
        print('----->init')
        self.name = name

    def __new__(cls, *args, **kwargs):
        print('----->new')
        position = super(Person, cls).__new__(cls) # 调用父类的 __new__() 方法，创建对象
        return position #地址

    def __call__(self, name):
        print('----->call')
        print('执行对象得到的参数是:',name)

p = Person('aa')
print(p) # None
print(p.name)
p('hello')













